/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jjsoft.celularessuc.gco.neg;

import com.jjsoft.celularessuc.gco.dao.GenericController;
import com.jjsoft.celularessuc.gco.mdl.Detalleproforma;
import com.jjsoft.celularessuc.gco.mdl.Gasto;
import com.jjsoft.celularessuc.gco.mdl.Ingreso;
import com.jjsoft.celularessuc.gco.mdl.Proforma;
import com.jjsoft.celularessuc.gco.mdl.Serie;
import com.jjsoft.celularessuc.gco.mdl.Sucursal;
import com.jjsoft.celularessuc.gco.util.configuraciones;
import java.util.Date;
import java.util.List;

/**
 *
 * @author Johnny
 */
public class ProformaManager {

    GenericController<Proforma> controladorProforma = new GenericController<Proforma>();
    ArticuloSucursalManager asm = new ArticuloSucursalManager();
    SerieManager sm = new SerieManager();

    public void guardarProforma(Proforma proforma) {
        controladorProforma.create(proforma);
        for (int i = 0; i < proforma.getDetalleproformaList().size(); i++) {
            asm.ReducirStock(proforma.getDetalleproformaList().get(i).getIdArticulo(), configuraciones.getInstance().getSucursal(), proforma.getDetalleproformaList().get(i).getCantidad());
            if (!proforma.getDetalleproformaList().get(i).getSerie().equals("")) {
                sm.quitaSerie(proforma.getDetalleproformaList().get(i).getIdArticulo(), configuraciones.getInstance().getSucursal(), proforma.getDetalleproformaList().get(i).getSerie());
            }
        }
        configuraciones.getInstance().getDiario().setValor(configuraciones.getInstance().getDiario().getValor() + proforma.getTotal());
        DiarioManager dm = new DiarioManager();
        dm.editarDiario(configuraciones.getInstance().getDiario());
        Ingreso ingreso = new Ingreso();
        ingreso.setConcepto("Venta con proforma a " + proforma.getCedulaCliente().getNombres() + " " + proforma.getCedulaCliente().getApellidos());
        ingreso.setFecha(proforma.getFechaEmision());
        ingreso.setHora(proforma.getFechaEmision().toLocaleString().substring(proforma.getFechaEmision().toLocaleString().indexOf(" ")));
        ingreso.setValor(proforma.getTotal());
        ingreso.setIdUsuario(configuraciones.getInstance().getUsuario());
        ingreso.setNumDocumento(proforma.getNumero());
        new IngresoManager().registrarIngreso(ingreso);
    }

    public int buscaNumero() {
        try {
            int numero = 1;
            List<Proforma> listaProformas = controladorProforma.findWhere(new Proforma(), "idSucursal=" + configuraciones.getInstance().getSucursal().getIdsucursal());
            if (listaProformas != null && listaProformas.size() > 0) {
                numero = listaProformas.get(listaProformas.size() - 1).getNumero() + 1;
            }
            return numero;
        } catch (Exception ex) {
            return 1;
        }
    }

    public Proforma buscarPorNumero(int numero) {
        try {
            Proforma proforma = controladorProforma.findWhere(new Proforma(), "numero=" + numero + " and idSucursal=" + configuraciones.getInstance().getSucursal().getIdsucursal()).get(0);

            GenericController<Detalleproforma> cdt = new GenericController<Detalleproforma>();
            List<Detalleproforma> listadetalle = cdt.findWhere(new Detalleproforma(), "idProforma=" + proforma.getIdProforma());
            proforma.setDetalleproformaList(listadetalle);
            return proforma;
        } catch (Exception ex) {
            return null;
        }

    }

    public List<Detalleproforma> buscarDetalle(Proforma proforma) {
        GenericController<Detalleproforma> controladorDetalle = new GenericController<Detalleproforma>();
        return controladorDetalle.findWhere(new Detalleproforma(), "idProforma=" + proforma.getIdProforma());
    }

    public void anularProforma(Proforma proforma) {
        proforma.setEstado(1);
        ArticuloSucursalManager asm = new ArticuloSucursalManager();
        SerieManager sm = new SerieManager();
        GastoManager gm = new GastoManager();
        try {
            controladorProforma.edit(proforma);
            for (int i = 0; i < proforma.getDetalleproformaList().size(); i++) {
                asm.ReducirStock(proforma.getDetalleproformaList().get(i).getIdArticulo(), configuraciones.getInstance().getSucursal(), proforma.getDetalleproformaList().get(i).getCantidad() * -1);
                if (!proforma.getDetalleproformaList().get(i).getSerie().equals("")) {
                    sm.devuelveSerie(proforma.getDetalleproformaList().get(i).getIdArticulo(), configuraciones.getInstance().getSucursal(), proforma.getDetalleproformaList().get(i).getSerie());
                }
            }

            Gasto gasto = new Gasto();
            Date d = new Date();
            gasto.setIdUsuario(configuraciones.getInstance().getUsuario());
            gasto.setFecha(d);
            gasto.setHora(d.toLocaleString().substring(d.toLocaleString().indexOf(" ")));
            gasto.setConcepto("Anulacion de venta con proforma N:" + proforma.getNumero());
            gasto.setValor(proforma.getTotal());
            configuraciones.getInstance().getDiario().setValor(configuraciones.getInstance().getDiario().getValor() - proforma.getTotal());
            gm.registrarGasto(gasto);
            DiarioManager dm = new DiarioManager();
            dm.editarDiario(configuraciones.getInstance().getDiario());

        } catch (Exception ex) {
            System.err.println(ex.getLocalizedMessage());
        }
    }

    public List<Proforma> buscarPorCedula(String cedula) {
        return controladorProforma.findWhere(new Proforma(), "cedula_cliente='" + cedula + "'");
    }

    public List<Proforma> buscarPorFechas(Date fecha1, Date fecha2) {
        String fechaIni = (fecha1.getYear() + 1900) + "-" + (fecha1.getMonth() + 1) + "-" + fecha1.getDate() + " 00:00:00";
        String fechafin = (fecha2.getYear() + 1900) + "-" + (fecha2.getMonth() + 1) + "-" + fecha2.getDate() + " 23:59:59";
        return controladorProforma.findWhere(new Proforma(), "fecha_emision>='" + fechaIni + "' and fecha_emision<='" + fechafin + "'");
    }

    public List<Proforma> buscarPorFechas(Date fecha1, Date fecha2, Sucursal sucursal) {
        String fechaIni = (fecha1.getYear() + 1900) + "-" + (fecha1.getMonth() + 1) + "-" + fecha1.getDate() + " 00:00:00";
        String fechafin = (fecha2.getYear() + 1900) + "-" + (fecha2.getMonth() + 1) + "-" + fecha2.getDate() + " 23:59:59";
        return controladorProforma.findWhere(new Proforma(), "fecha_emision>='" + fechaIni + "' and fecha_emision<='" + fechafin + "' and idSucursal=" + sucursal.getIdsucursal());
    }

    public Detalleproforma buscarDetalleSerie(Serie serie) {
        GenericController<Detalleproforma> cdt = new GenericController<Detalleproforma>();
        try {
            List<Detalleproforma> listadetalle = cdt.findWhere(new Detalleproforma(), "idArticulo=" + serie.getIdArticulo().getCodigo() + " and serie ='" + serie.getNumSerie() + "'");
            Detalleproforma detalle = listadetalle.get(listadetalle.size() - 1);
            return detalle;
        } catch (Exception ex) {
            return null;
        }
    }
}
